Routing protocols have been designed to take into account a number of network-related conditions in creating and maintaining routes, such as reachability and network congestion. Currently, however, there is no way to route based upon non-network related conditions, such as dynamic latency, service level agreements, identity conditions, bandwidth, or contractual arrangements requiring a certain amount of traffic to flow via a given provider, as incorporating these capabilities into a switch is prohibitive to do for each individual customer.